<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>34.多继承造成的困扰</title>
</head>

<body>
</body>

<script>
  //JS不能实现多继承，如果要使用多个类的方法时可以使用mixin混合模式来完成。

  //  - mixin 类是一个包含许多供其它类使用的方法的类
  //  - mixin 类不用来继承做为其它类的父

  //下面是示例中 Admin需要使用 Request.prototype 与 Credit 的功能，因为JS 是单继承，我们不得不将无关的类连接在一下，显然下面的代码实现并不佳
  function extend (sub, sup) {
    sub.prototype = Object.create(sup.prototype);
    sub.prototype.constructor = sub;
    Object.defineProperty(sub.prototype, 'constructor', {
      value: sub,
      enumerable: false
    });

  }
  function Credit () { }
  function Request () { }
  function User (name, age) {
    this.name = name;
    this.age = age;
  }
  extend(Request, Credit);
  extend(User, Request);
  Credit.prototype.total = function () {
    console.log("统计积分");
  };
  Request.prototype.ajax = function () {
    console.log("请求后台");
  };
  User.prototype.show = function () {
    console.log(this.name, this.age);
  };
  function Admin (...args) {
    User.apply(this, args);
  }
  extend(Admin, User);
  let hd = new Admin("向军", 19);
  hd.show();
  //console.log(hd.constructor);
  hd.total(); //统计积分
  hd.ajax(); //请求后台
</script>

</html>